//
//  Man.m
//  07_code  内存管理
//
//  Created by dllo on 16/7/12.
//  Copyright © 2016年 yh. All rights reserved.
//

#import "Man.h"

@implementation Man
// assign retain copy 的setter方法 (在MRC下)
- (void)setNumber:(NSInteger)number {
    _number = number;
}
// retain
- (void)setName:(NSString *)name {
    if (_name != name) {
        [_name release];
        _name = [name retain];
    }
}
// copy
- (void)setMid:(NSString *)mid {
    if (_mid != mid) {
        [_mid release];
        _mid = [mid copy];
    }
}

// ARC可以写dealloc 但不能写 super dealloc
- (void)dealloc {
    //释放所有需要释放的成员变量 (引用计数发生变化的都要dealloc)
    [_mid release];
    [_name release];
    [_gayBoy release];
    [_sexual release];
    [_mdescription release];
    [super dealloc];
}
// 2. 协议方法的实现是在签订者的实现文件中实现(.m)
- (void)sayHello {
    NSLog(@"can we love with each other?");
}

- (void)sayGoodBye {
    NSLog(@"never say goodbye");
}

// 实现copy协议
- (id)copyWithZone:(NSZone *)zone {
    // 开辟新的空间 创建一个新的对象
    Man *man = [[Man allocWithZone:zone] init];
    // 浅拷贝 只创建了新的对象 但是所有的属性还是指向原来的内容的
    man.name = self.name;
    man.sexual = self.sexual;
    // 深拷贝 不只创建新对象 所有的属性也对应的拷贝一份新的 NSString 内部已经签订了NSCopying协议 所以字符串可以实现copy
    man.name = [self.name copy];
    man.sexual = [self.sexual copy];
    return man;
}
// 赋值 用      在这个方法中编写找不到key值得处理措施
- (void)setValue:(id)value forUndefinedKey:(NSString *)key {
    if ([key isEqualToString:@"id"]) {
        self.mid = value;
    }
    if ([key isEqualToString:@"description"]) {
        self.mdescription = value;
    }
}
// 取值 用
- (id)valueForUndefinedKey:(NSString *)key {
    return nil;
}


@end
